#-*- coding: utf-8 -*-

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import relationship, backref
from sqlalchemy import Column, Integer, String, \
     ForeignKey
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///treta.db')
Base = declarative_base()

class Naturalidade(Base):
    __tablename__= 'naturalidades'
    id = Column(Integer, primary_key=True)
    nome = Column(String)
    def __init__(self, nome):
        self.nome = nome
    
class Aluno(Base):
    __tablename__='alunos'
    id = Column(Integer, primary_key=True)
    nome = Column(String)
    numero = Column(Integer)
    curso = Column(String)
    naturalidade_id = Column(Integer,
                             ForeignKey('naturalidades.id'))
    naturalidade = relationship("Naturalidade", backref=backref('alunos',
                                                                order_by=id))

    def __init__(self, nome, numero, curso, naturalidade):
        self.nome = nome
        self.numero = numero
        self.curso = curso
        self.naturalidade = naturalidade


Base.metadata.create_all(engine)

# INSERT em naturalidades
Session = sessionmaker(bind=engine)
session = Session()
portugal = Naturalidade('Portugal')
espanha = Naturalidade('Espanha')
franca = Naturalidade('Franca')
session.add(portugal)
session.add(espanha)
session.add(franca)
session.commit()

# INSERT into alunos
aluno1 = Aluno('Tiago Bond', '007', 'Espeleologia',
               portugal)
aluno2 = Aluno('Barbara Bond', '008', 'Comunicacao',
               espanha)
aluno1 = Aluno('Manuel Bond', '009', 'Filosofia',
               franca)
session.add(aluno1)
session.add(aluno2)
session.add(aluno3)
session.commit()

print "Nomes"
for obj in session.query(Aluno):
    print obj.nome.upper()
print
for obj in session.query(Aluno).\
    filter(Aluno.nome=='Barbara Bond'):
    print "informacao sobre:"
    print "nome=", obj.nome
    print "numero {0} e curso {1}".\
          format(obj.numero, obj.curso.upper())
